# len()
# print()
# zip()

# str.count()
# str.split()
#
# def func():
#     pass
#
#
# class A:
#
#     def func(self):
#         pass

# 1 通过函数名可以大致判断
# print(func)  # <function func at 0x00000000005D1EA0>
# obj = A()
# print(obj.func)  # <bound method A.func of <__main__.A object at 0x0000000001DE1CF8>>

# 2. 通过types模块去验证
from types import FunctionType
from types import MethodType


def func():
    pass


class A:

    def func(self):
        pass

    @staticmethod
    def f():
        pass
# print(isinstance(func, FunctionType))
# print(isinstance(func, MethodType))

# 类名调用func 就是一个函数
# print(isinstance(A.func, FunctionType))
# print(isinstance(A.func, MethodType))
# obj = A()
# 对象调用func 就是一个方法
# print(isinstance(obj.func, FunctionType))
# print(isinstance(obj.func, MethodType))

# 对于静态方法的研究
# print(isinstance(A.f, FunctionType))
# print(isinstance(A.f, MethodType))

# obj = A()
# # 对象调用func
# print(isinstance(obj.f, FunctionType))
# print(isinstance(obj.f, MethodType))

# 函数与方法
# 函数: 全都是显性传参
# 方法: 存在隐性传参
